# 匿名函数 通过lambda定义匿名函数
print(lambda x, y: x + y)  # 定义依然是内存地址，但是引用技术为0,定义就调用，调用后销毁

# 调用匿名函数 方式一
res = (lambda x, y: x + y)(1, 2)
print(res)
# 调用匿名函数 方式二(没有任何意义)
func = lambda x, y: x + y
res = func(2, 3)
print(res)

# 例 找出薪资最高的人
salaries = {
    "siry": 3000,
    "tom": 1000,
    "roy": 5000,
    "jack": 10000
}
res = max(salaries)  # max通过迭代器迭代取值，字典默认取key比较key 可以使用key=指定比较依据
print(res)

res = max(salaries, key=lambda name: salaries[name])  # 通过lambda表达式指定比较依据
print(res)

res = sorted([3, 2, 4])  # 排序列表
print(res)
res = sorted(salaries, key=lambda k: salaries[k],reverse=True)  # 通过lambda指定key排序字典
print(res)

# map 映射
l = ["tom", "jack", "roy"]
res = map(lambda name: name + "_aaa", l)  # 得到生成器
for r in res:
    print(r)

# filter 过滤
res = filter(lambda name: name.endswith("oy"), l)
for r in res:
    print(r)

# reduce python2是内置函数，python3放入functools模块中
from  functools import reduce
res = reduce(lambda x,y:x+y,[1,2,3],10)  # 指定10为初始值


